package cn.chengpengper.rpc.annotation;

import cn.chengpengper.rpc.constants.RpcConstants;
import org.springframework.beans.factory.annotation.Autowired;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author chengpeng.hu
 * @description rpc 服务消费者注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Autowired
public @interface RpcReference {

    /**
     * 版本号
     *
     * @return
     */
    String version() default "1.0.0";

    /**
     * 注册中心类型，目前的类型包含：zookeeper,nacos,etcd,consul
     */
    String registryType() default "zookeeper";

    /**
     * 注册地址
     */
    String registryAddress() default "127.0.0.1:2181";

    /**
     * 负载均衡类型，默认基于ZK的一致性hash
     */
    String loadBalanceType() default "hash";

    /**
     * 序列化类型，目前的类型包含：protostuff,kryo,json,jdk,hessian2,fst
     */
    String serializationType() default "protostuff";

    /**
     * 超时时间，默认5s
     */
    long timeout() default 5000;

    /**
     * 是否异步执行
     */
    boolean async() default false;

    /**
     * 是否单向执行
     */
    boolean oneway() default false;

    /**
     * 代理类型，jdk：jdk代理，javassist：javassist代理，cglib：cglib代理
     */
    String proxy() default "jdk";

    /**
     * 服务分组，默认为空
     */
    String group() default "";

    /**
     * 心跳间隔时间，默认30秒
     */
    int heartbeatInterval() default 30000;

    /**
     * 扫描空闲连接间隔时间，默认60秒
     */
    int scanNotActiveChannelInterval() default 60000;

    /**
     * 重试间隔时间
     */
    int retryInterval() default 1000;

    /**
     * 重试间隔时间
     */
    int retryTimes() default 3;

    boolean enableResultCache() default false;

    int resultCacheExpire() default RpcConstants.RPC_SCAN_RESULT_CACHE_EXPIRE;

    boolean enableDirectServer() default false;

    String directServerUrl() default RpcConstants.RPC_COMMON_DEFAULT_DIRECT_SERVER;

    boolean enableDelayConnection() default false;
}
